#coding:utf-8
import re 
'''
模式字符串使用特殊的语法来表示正则表达式
字母和数字就是本身
很多字母加上反斜杠就表示不同的匹配原则
标点符号要被转义才表示符号本身，否则都是有特殊含义
反斜杠必须要被反斜杠才表示本身
'''
#^匹配以某字符串开头
print(re.search((r'^ab'),'abcdefg'))
#$匹配以某字符串结尾
print(re.search((r'ab$'),'cdefab'))
#.匹配任意字符
print(re.search((r'.da'),'abc?daef'))
#[abc] 表示匹配 a或b或c
print(re.search((r'[Pp]ython'),'I like python'))
#[^abc] 表示匹配除了a或b或c
print(re.search((r'[^Pp]ython'),'I like aython'))
# *前面的字符出现任意次数
print(re.search((r'ca*b'),'abcdcaaaaabbb'))
# +前面的字符至少出现一次
print(re.search((r'ca+b'),'abcdcabbb'))
# ?前面的字符最多出现一次
print(re.search((r'ca?b'),'abcdcbbb'))
# {m} {}前面只能出现m次
print(re.search((r'ca{3}b'),'abcdcaaabbb'))
# {m,n}  表示{}前面的字符最少出现m次，最多出现n次
print(re.search((r'ca{2,4}b'),'abcdcaabbb'))
'''
贪婪模式(更多):在整个表达式匹配成功的情况下，尽可能多的匹配
非贪婪模式(更少):在整个表达式匹配成功的情况下,尽可能少的匹配
默认贪婪模式
'''
print('-----')
#默认贪婪模式
print(re.search((r'ba+'),'baaaaaaaaaab'))
#非贪婪模式  加个？
print(re.search((r'ba+?'),'baaaaaaaaaab'))
#匹配a规则或者b规则     img  或  png  
print(re.search((r'abc|dcb'),'ugabcjdj'))
#匹配括号内的表达式
print(re.search((r'(abcd)'),'ugabcdjdj'))